<?php

if(!function_exists('checkPublishDateValue')) {
    /**
     * 自动认证时间
     * @param $str
     * @return bool
     */
    function checkPublishDateValue($str) {
        //为空返回true
        if(empty($str)){
            return True;
        }
        //不为空认证格式
        if (preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/s", $str, $parts) || preg_match("/^(\d{4})-(\d{2})-(\d{2}) \d{2}:\d{2}:\d{2}$/s",$str,$parts)){
            //检测是否为日期
            if(checkdate($parts[2],$parts[3],$parts[1])){
                $time = strtotime($str);
                if(0 < $time && $time < 2147483647){
                    return True;
                }else{
                    return false;
                }
            }else{
                return false;
            }
        }else{
            return false;
        }
    }
}

if(!function_exists('automaticConversionTime')) {
    /**
     * 自动转化时间
     * @param $str
     * @return false|int
     */
    function automaticConversionTime($str=''){
        if(empty($str)){
            return time();
        }
        return strtotime($str);
    }
}

if(!function_exists('intConversionTimeHMS')) {
    /**
     * @param $minutes 时间，单位是分钟
     * @return string
     */
    function intConversionTimeHMS($minutes){
        if(empty($minutes)){
            //分
            return "00°00'";
        }
        // 分
        return gmstrftime("%H°%M’", $minutes*60);
//        if(empty($minutes)){
//            //秒
//            return "00°00'0\"";
//        }
//        // 秒
//        return gmstrftime("%H°%M'%S\"", $minutes*60);
    }
}
if(!function_exists('auto_int_value0')) {
    /*
     * 自动转化默认值：0
     */
    function auto_int_value0($value=0){   return $value;  }
}
if(!function_exists('auto_int_value1')) {
    /*
     * 自动转化默认值：1
     */
    function auto_int_value1($value=1){   return $value;  }
}

if(!function_exists('auto_string_value')) {
    /*
     * 自动转化默认值：空字符串
     */
    function auto_string_value($str=''){   return $str;   }
}

/**
 * @param $value   值
 * @param $tableColumn   关联的数据表字段,格式：Table.Column
 * @return mixed
 */
function checkTableRelevanceExist($value, $tableColumn){
    $arr = explode('.', $tableColumn);
    $table = $arr[0];
    $column = $arr[1];
    if(empty($table) || empty($column) || empty($value)){
        return false;
    }
    return M($table)->where([$column=>$value])->find()? true: false;
}
/**
 * 检测DBCount的值是否存在
 * @param $value
 * @param $functionName
 * @return bool
 */
function checkDBCountValueExist($value, $functionName){
    $check = DBCount::{$functionName}($value);
    return isset($check)? true: false;
}

function deleteOneData($map){
        if(!($this->where($map)->count())){
            $this->_error = '访问的内容不存在';
            return false;
        }
        $r = $this->del($map['id']);
        if($r === false){
            $this->_error = $this->getError();
        }
        return $r;
}

class Model{

    protected $_validate = array(
        /*********添加********/
        array('openid', 'require', '请使用微信扫码登录',self::MUST_VALIDATE ,'',self::MODEL_INSERT),
        array('openid','','不能重复注册',self::MUST_VALIDATE,'unique',parent::MODEL_INSERT),
        array('name', 'require', '学生姓名必填',self::MUST_VALIDATE ,'',self::MODEL_INSERT),
        array('gender', 'require', '性别必填',self::MUST_VALIDATE ,'',self::MODEL_INSERT),
        array('grade', 'require', '年级必填',self::MUST_VALIDATE ,'',self::MODEL_INSERT),
        array('stu_num', 'require', '学号必填',self::MUST_VALIDATE ,'',self::MODEL_INSERT),
        array('tel', 'require', '手机号必填',self::MUST_VALIDATE ,'',self::MODEL_INSERT),
        array('email', 'require', '邮箱必填',self::MUST_VALIDATE ,'',self::MODEL_INSERT),
        /*********更改********/
        array('name', 'require', '学生姓名必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        array('gender', 'require', '性别必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        array('grade', 'require', '年级必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        array('stu_num', 'require', '学号必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        array('tel', 'require', '手机号必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        array('email', 'require', '邮箱必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        array('retn_reason', 'require', '审核不通过的原因必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        array('avatar', 'require', '头像必填',self::EXISTS_VALIDATE ,'',self::MODEL_UPDATE),
        /*********格式********/
        array('tel', 'checkTel', '手机号不正确',self::EXISTS_VALIDATE ,'callback',self::MODEL_BOTH),
        array('email','email','邮箱格式不符合要求。',self::EXISTS_VALIDATE ,'',self::MODEL_BOTH),
        /*********表关联********/
        array('teacher_id', 'checkTableRelevanceExist', '教师不存在', self::EXISTS_VALIDATE, 'function', self::MODEL_BOTH,'User.id'),
        /*********取值范围********/
        //array('value',array(1,2,3),'值的范围不正确！',2,'in'),
        array('name', '1,30', '姓名过长',self::EXISTS_VALIDATE,'length', self::MODEL_BOTH),
        array('gender', 'checkDBCountValueExist', '性别不存在',self::EXISTS_VALIDATE ,'function',self::MODEL_BOTH,'getGender'),
        array('grade', '4', '年级错误',self::EXISTS_VALIDATE,'length', self::MODEL_BOTH),
        array('stu_num', '1,10', '学号过长',self::EXISTS_VALIDATE,'length', self::MODEL_BOTH),
        array('tel', '1,11', '手机号过长',self::EXISTS_VALIDATE,'length', self::MODEL_BOTH),
        array('email', '1,60', '邮箱过长',self::EXISTS_VALIDATE,'length', self::MODEL_BOTH),
        array('nickname', '1,20', '呢称过长',self::EXISTS_VALIDATE,'length', self::MODEL_BOTH),
        array('retn_reason', '1,300', '审核不通过的原因过长',self::EXISTS_VALIDATE,'length', self::MODEL_BOTH),
        /********结束*********/
    );

    protected $_auto = array(
        array('create_date', 'automaticConversionTime', parent::MODEL_INSERT, 'function'),
        //用户刚创建，下面的值为0
        array('finish_test', 'auto_int_value', parent::MODEL_INSERT, 'callback'),
        array('duration', 'auto_int_value', parent::MODEL_INSERT, 'callback'),
        array('audit', 'auto_int_value', parent::MODEL_INSERT, 'callback'),
        array('teacher_id', 'auto_int_value', parent::MODEL_INSERT, 'callback'),
    );
    public function auto_int_value($value=0){   return 0;  }
}